package com.quyunshuo.module.home.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.quyunshuo.module.home.R
import com.quyunshuo.module.home.databinding.RvItemPublicArticleBinding

// 继承自 BaseQuickAdapter 的自定义适配器
class MainRvAdapter :
    BaseQuickAdapter<String, MainRvAdapter.ViewHolder>(R.layout.rv_item_public_article) {

    // 声明一个可为空的回调函数
    // 类型: 接收一个 String 参数并返回 Unit (无返回值)
    private var itemClickCallback: ((String) -> Unit)? = null

    // 设置回调函数的方法
    // 参数是一个函数类型 (String) -> Unit
    fun setCallback(callback: (String) -> Unit) {
        // 将传入的回调函数赋值给类内部的回调变量
        itemClickCallback = callback
    }

    // 自定义 ViewHolder 类
    inner class ViewHolder(val binding: RvItemPublicArticleBinding) :
        BaseViewHolder(binding.root)  // 继承自 BaseViewHolder

    // 创建 ViewHolder 的方法
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 使用 ViewBinding 从布局文件创建视图
        val binding = RvItemPublicArticleBinding.inflate(
            LayoutInflater.from(parent.context),  // 从父容器的上下文获取 LayoutInflater
            parent,   // 父容器
            false     // 不立即附加到父容器
        )
        // 返回创建好的 ViewHolder 实例
        return ViewHolder(binding)
    }

    // 数据绑定方法（核心方法）
    override fun convert(holder: ViewHolder, item: String) {
        // 在这里绑定数据到视图
        // holder: 当前项的 ViewHolder
        // item: 当前绑定的字符串数据

        // 获取当前项的位置
        val position = holder.adapterPosition

        // 设置点击事件
        holder.itemView.setOnClickListener {
            itemClickCallback?.invoke(item)

            // 检查回调函数是否已被设置
//            itemClickCallback?.let { callback ->
//                // 如果设置了回调，则调用它并传入当前项的数据
//                callback(item)
//
//                // 替代方案: 也可以直接使用 invoke() 调用
//                // itemClickCallback?.invoke(item)
//            }
        }

        // 示例数据绑定:
        // holder.binding.textView.text = item
    }

    // 可选: 清理资源方法
    override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
        super.onDetachedFromRecyclerView(recyclerView)
        // 适配器从RecyclerView分离时清空回调引用，避免内存泄漏
        itemClickCallback = null
    }
}